#!/bin/bash

TOP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"

# 设置变量
declare -A IMAGE_BASES=(
    ["14.04"]="ubuntu14.04-old"
    ["20.04"]="ubuntu20.04-pro"
)
declare -A DOCKERFILE_BASES=(
    ["14.04"]="${TOP_DIR}/docker/Dockerfile_ubuntu_old"
    ["20.04"]="${TOP_DIR}/docker/Dockerfile_ubuntu_pro"
)
declare -A DOCKERFILE_DEVS=(
    ["14.04"]="${TOP_DIR}/docker/Dockerfile_devel_1404"
    ["20.04"]="${TOP_DIR}/docker/Dockerfile_devel_2004"
)

TAG="latest"
LOG_FILE="${TOP_DIR}/develop_image_build.log"

# 清除旧日志
echo "" > "$LOG_FILE"

# 颜色代码
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 函数：输出信息
log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
    echo "[INFO] $1" >> "$LOG_FILE"
}

# 函数：输出警告
log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
    echo "[WARNING] $1" >> "$LOG_FILE"
}

# 函数：输出错误
log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
    echo "[ERROR] $1" >> "$LOG_FILE"
}

# 显示帮助信息
show_help() {
    echo "Usage: $0 [OPTIONS]"
    echo "Options:"
    echo "  -v, --version VERSION    指定Ubuntu版本 (14.04 或 20.04)"
    echo "  -h, --help              显示帮助信息"
    echo "Example:"
    echo "  $0 --version 14.04"
    echo "  $0 --version 20.04"
}

# 解析命令行参数
UBUNTU_VERSION="20.04"  # 默认版本
while [[ $# -gt 0 ]]; do
    key="$1"
    case $key in
        -v|--version)
        UBUNTU_VERSION="$2"
        shift 2
        ;;
        -h|--help)
        show_help
        exit 0
        ;;
        *)
        log_error "未知参数: $1"
        show_help
        exit 1
        ;;
    esac
done

# 验证版本
if [[ ! "${IMAGE_BASES[$UBUNTU_VERSION]}" ]]; then
    log_error "不支持的Ubuntu版本: $UBUNTU_VERSION"
    show_help
    exit 1
fi

# 设置镜像名称和Dockerfile路径
VERSION_STR=${UBUNTU_VERSION//.}
IMAGE_NAME="devel-image-${VERSION_STR}"
IMAGE_BASE="${IMAGE_BASES[$UBUNTU_VERSION]}"
DOCKERFILE_BASE="${DOCKERFILE_BASES[$UBUNTU_VERSION]}"
DOCKERFILE_DEV="${DOCKERFILE_DEVS[$UBUNTU_VERSION]}"

# 检查 Docker 是否安装
if ! command -v docker &> /dev/null; then
    log_error "Docker 未安装，请先安装 Docker。"
    exit 1
fi

# 检查 Dockerfile 是否存在
if [ ! -f "$DOCKERFILE_BASE" ]; then
    log_error "$DOCKERFILE_BASE 不存在。请确保主目录下有 $DOCKERFILE_BASE。"
    exit 1
fi

if [ ! -f "$DOCKERFILE_DEV" ]; then
    log_error "$DOCKERFILE_DEV 不存在。请确保主目录下有 $DOCKERFILE_DEV。"
    exit 1
fi

# 开始构建
log_info "开始构建 Ubuntu ${UBUNTU_VERSION} 的 Docker 镜像: ${IMAGE_NAME}:${TAG}"

# 检测 base 镜像是否存在
if ! docker inspect --type=image "$IMAGE_BASE:$TAG" > /dev/null 2>&1; then
    log_info "Image ${IMAGE_BASE}:${TAG} not found. Building..."
    log_info "Building by $DOCKERFILE_BASE"

    # 构建基础镜像
    if docker build --network=host -t "$IMAGE_BASE:$TAG" -f "$DOCKERFILE_BASE" . 2>&1 | tee >(cat >> "$LOG_FILE"); then
    #if docker build -t "$IMAGE_BASE:$TAG" -f "$DOCKERFILE_BASE" . 2>&1 | tee >(cat >> "$LOG_FILE"); then
        log_info "Docker 基础镜像构建成功: $IMAGE_BASE:$TAG"
    else
        log_error "Docker 基础镜像构建失败。"
        exit 1
    fi

    # 验证基础镜像是否成功创建
    if ! docker inspect --type=image "$IMAGE_BASE:$TAG" > /dev/null 2>&1; then
        log_error "基础镜像构建失败: $IMAGE_BASE:$TAG"
        exit 1
    fi
else
    log_info "Image ${IMAGE_BASE}:${TAG} already exists."
fi

# 构建开发镜像
log_info "开始构建开发镜像: docker build -t ${IMAGE_NAME}:${TAG} -f ${DOCKERFILE_DEV} ."
#if docker build -t "${IMAGE_NAME}:${TAG}" -f "$DOCKERFILE_DEV" . 2>&1 | tee >(cat >> "$LOG_FILE"); then
if docker build --network=host -t "${IMAGE_NAME}:${TAG}" -f "$DOCKERFILE_DEV" . 2>&1 | tee >(cat >> "$LOG_FILE"); then
    log_info "Docker 镜像构建成功: ${IMAGE_NAME}:${TAG}"
else
    log_error "Docker 镜像构建失败。"
    exit 1
fi

# 确认镜像是否成功创建
if ! docker image inspect "${IMAGE_NAME}:${TAG}" >/dev/null 2>&1; then
    log_error "镜像构建失败：${IMAGE_NAME}:${TAG} 不存在"
    exit 1
fi

# 显示镜像信息
log_info "镜像详情:"
docker images "${IMAGE_NAME}:${TAG}"

# 清理未使用的镜像
log_warning "是否要清理未使用的 Docker 镜像？(y/n)"
read -r response
if [[ "${response,,}" =~ ^(yes|y)$ ]]; then
    log_info "清理未使用的 Docker 镜像..."
    docker image prune -f
else
    log_info "跳过清理。"
fi

log_info "构建过程完成。日志保存在 $LOG_FILE"
